package org.jeecg.modules.wangyue.utils;

import org.apache.commons.lang.RandomStringUtils;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Random;
import java.util.UUID;

/**
 * 共用工具类
 */
public class CommonUtil {

    private static String[] chars36 = new String[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
    private static String[] chars62 = new String[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };

    /**
     * 通过uuid生成推广码(8位数)
     * @return
     */
    public static String promotionCode()
    {
        StringBuffer shortBuffer = new StringBuffer();
        String uuid = UUID.randomUUID().toString().replace("-", "");
        for (int i = 0; i < 8; i++)
        {
            String str = uuid.substring(i * 4, i * 4 + 4);
            int x = Integer.parseInt(str, 16);
            // 如果是 chars62,则是x%62
            shortBuffer.append(chars36[x % 36]);
        }
        return shortBuffer.toString();
    }

    /**
     * 通过uuid生成随机数
     * @return
     */
    public static String uuid32(){
        return UUID.randomUUID().toString().replaceAll("-","");
    }


    /**
     * 生成6位随机验证码
     * @return
     */
    public static String generateCode6() {
        Random randObj = new Random();
        return Integer.toString(100000 + randObj.nextInt(900000));
    }
    /**
     * 生成4位随机验证码
     * @return
     */
    public static String generateCode4() {
        Random randObj = new Random();
        return Integer.toString(1000 + randObj.nextInt(9000));
    }


    /**
     * 生成订单号（20位）：时间（精确到毫秒）+3位随机数
     */
    public static synchronized String getOrderNum() {
        //时间（精确到毫秒）
        DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
        String localDate = LocalDateTime.now().format(ofPattern);
        //3位随机数
        String randomNumeric = RandomStringUtils.randomNumeric(3);
        String orderNum = localDate + randomNumeric;
        return orderNum;
    }



    public static void main(String[] args) {
        System.out.println(UUID.randomUUID().toString());
        System.out.println(uuid32());
        System.out.println(System.currentTimeMillis());
        System.out.println(promotionCode());
        System.out.println(generateCode6());
        System.out.println(generateCode4());
        System.out.println("getOrderNum:" + getOrderNum());
    }


}
